package base;



public class Particula implements Comparable<Particula>{
	private double[] posicao;

	private double[] melhorPosicaoParticula;
	private double[] melhorPosicaoGlobalVizualizada;

	private double fitness;
	private double bestFitness;

	private double[] velocidade;

	public Particula(double[] posicao, double[]	velocidade){
		this.posicao = posicao;
		this.velocidade = velocidade;

		this.melhorPosicaoParticula = posicao;
		this.bestFitness = Double.MAX_VALUE;
	}

	public double[] getPosicao() {
		return posicao;
	}

	public void setPosicao(double[] posicao) {
		this.posicao = posicao;
	}

	public double[] getMelhorPosicaoParticula() {
		return melhorPosicaoParticula;
	}

	public void setMelhorPosicaoParticula(double[] melhorPosicaoParticula) {
		this.melhorPosicaoParticula = melhorPosicaoParticula.clone();
	}

	public double[] getMelhorPosicaoGlobalVizualizada() {
		return melhorPosicaoGlobalVizualizada;
	}

	public void setMelhorPosicaoGlobalVizualizada(
			double[] melhorPosicaoGlobalVizualizada) {
		this.melhorPosicaoGlobalVizualizada = melhorPosicaoGlobalVizualizada.clone();
	}

	public double getFitness() {
		return fitness;
	}

	public void setFitness(double fitness) {
		this.fitness = fitness;
	}

	public double getBestFitness() {
		return bestFitness;
	}

	public void setBestFitness(double bestFitness) {
		this.bestFitness = bestFitness;
	}

	public double[] getVelocidade() {
		return velocidade;
	}

	public void setVelocidade(double[] velocidade) {
		this.velocidade = velocidade;
	}

	@Override
	public int compareTo(Particula particula) {
		if(fitness < particula.getFitness()){
			return -1;
		}
		else if(fitness > particula.getFitness()){
			return 1;
		}
		return 0;
	}

	@Override
	public boolean equals(Object obj) {
		
		if(!(obj instanceof Particula)){
			return false;
		}
		
		Particula referencia = (Particula)obj;
		for (int i = 0; i < posicao.length; i++) {
			if(posicao[i] != referencia.getPosicao()[i])
				return false;
		}
		
		return true;
	}
	
	@Override
	public String toString() {
		return fitness + "";
	}

}
